package net.lab0.fractal.abstracts;


public interface ManageableFractalInterface
extends Runnable
{
	/**
	 * starts the computation
	 */
	public void startComputation();
	/**
	 * restarts the computation, for instance : when a parameter was modified
	 */
	public void restartComputation();
	
	/**
	 * stops the computation, no resume possible
	 */
	public void stopComputation();
	
	/**
	 * pauses the computation, resume possible
	 */
	public void pauseComputation();
	
	/**
	 * resumes the computation after a pause or the end of a computation loop
	 */
	public void unpauseComputation();
	
	/**
	 * 
	 * @return the state in which the fractal computation process is. Defaults to NOT_STARTED
	 */
	public FractalState getState();

//	/**
//	 * sets the time for this thread to wait until it tests again whether it is in pause or not
//	 */
//	public void setPauseTime(long milliseconds);
//	
//	/**
//	 * 
//	 * @return the pause time set with the <code>setPauseTime()</code> method. Defaults to 500ms
//	 */
//	public long getPauseTime();
	
	/**
	 * 
	 * @return the thread used to run this fractal
	 */
	public Thread getThread();
}
